import { saveAs } from 'file-saver';

{
  //下载一个链接
  function download(link, name) {
    if (!name) {
      name = link.slice(link.lastIndexOf('/') + 1);
    }
    let eleLink = document.createElement('a');
    eleLink.download = name;
    eleLink.style.display = 'none';
    eleLink.href = link;
    document.body.appendChild(eleLink);
    eleLink.click();
    document.body.removeChild(eleLink);
  }
  //下载excel
  download('http://111.229.14.189/file/1.xlsx');
}

{
  // 我想下载一些DOM内容，我想下载一个JSON文件
  /**
   * 浏览器下载静态文件
   * @param {String} name 文件名
   * @param {String} content 文件内容
   */
  function downloadFile(name, content) {
    if (typeof name == 'undefined') {
      throw new Error('The first parameter name is a must');
    }
    if (typeof content == 'undefined') {
      throw new Error('The second parameter content is a must');
    }
    if (!(content instanceof Blob)) {
      content = new Blob([content]);
    }
    const link = URL.createObjectURL(content);
    download(link, name);
  }
  //下载一个链接
  function download(link, name) {
    if (!name) {
      //如果没有提供名字，从给的Link中截取最后一坨
      name = link.slice(link.lastIndexOf('/') + 1);
    }
    let eleLink = document.createElement('a');
    eleLink.download = name;
    eleLink.style.display = 'none';
    eleLink.href = link;
    document.body.appendChild(eleLink);
    eleLink.click();
    document.body.removeChild(eleLink);
  }

  // 使用方式：
  downloadFile('1.txt', 'lalalallalalla');
  downloadFile('1.json', JSON.stringify({ name: 'hahahha' }));
  // 下载后端返回的流
  download('http://111.229.14.189/gk-api/util/download?file=1.jpg');
  download('http://111.229.14.189/gk-api/util/download?file=1.mp4');
}

{
  // 提供一个图片链接，点击下载
  // 可以用来下载浏览器会默认预览的文件类型，例如mp4,jpg等
  // 提供一个link，完成文件下载，link可以是  http://xxx.com/xxx.xls
  function downloadByLink(link, fileName) {
    axios
      .request({
        url: link,
        responseType: 'blob', //关键代码，让axios把响应改成blob
      })
      .then((res) => {
        const link = URL.createObjectURL(res.data);
        download(link, fileName);
      });
  }
  // 注意：会有同源策略的限制，需要配置转发
}

{
  // file-saver 下载 excel csv文件

  const dealFileSave = (data, headers) => {
    const fileNames = /filename[^;\n=]*=((['"]).*?\2|[^;\n]*)/g.exec(
      headers?.['content-disposition'] || ''
    );
    const encodeFileName = decodeURIComponent(fileNames?.[1] || '');
    const blob = new Blob([data], { type: '**application/octet-stream**' });
    saveAs(blob, String(encodeFileName?.replaceAll('"', '')) || 'unknown.xlsx');
  };

  async function downloadFile(id) {
    const data = await axios({
      url: `download/files/${id}`,
      method: 'GET',
      responseType: 'blob',
    });

    const headers = {};
    dealFileSave(data, headers);
  }

  // id是服务端生成的，通过接口返回
  downloadFile('1212');
}
